import axios from 'axios'

// 创建 axios 实例
const instance = axios.create({
  baseURL: '', // 同源请求，依赖 Vite 代理转发 /api
  timeout: 8000,
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json; charset=utf-8'
  }
})

// 将常见错误进行标准化，便于统一处理
function normalizeError(error) {
  // 网络错误（如断网、DNS 失败）
  if (!error.response) {
    if (error.code === 'ECONNABORTED' || /timeout/i.test(error.message)) {
      return { message: '请求超时，请稍后重试', status: 0, data: null }
    }
    return { message: '网络异常，请检查网络连接', status: 0, data: null }
  }

  const { status, data } = error.response
  // 简单按状态分类（可按需扩展）
  if (status >= 500) return { message: '服务器异常，请稍后重试', status, data }
  if (status === 404) return { message: '资源不存在（404）', status, data }
  if (status === 401) return { message: '未授权或登录已失效（401）', status, data }
  if (status === 403) return { message: '没有权限访问（403）', status, data }
  return { message: data?.message || `请求失败（${status}）`, status, data }
}

// 请求拦截：可在此注入 token 等
instance.interceptors.request.use(
  (config) => {
    // 例如：
    // const token = localStorage.getItem('token')
    // if (token) config.headers['Authorization'] = `Bearer ${token}`
    return config
  },
  (error) => Promise.reject(normalizeError(error))
)

// 响应拦截：统一处理成功/失败
instance.interceptors.response.use(
  (response) => response,
  (error) => Promise.reject(normalizeError(error))
)

// 便捷方法：GET / POST
export function httpGet(url, params = {}, config = {}) {
  return instance.get(url, { params, ...config }).then(res => res.data)
}

export function httpPost(url, data = {}, config = {}) {
  return instance.post(url, data, config).then(res => res.data)
}

export default instance
